Implementation Plan: Vagrant Demo Lab Environment
Branch: 006-vagrant-demo-lab | Date: 2026-02-15 | Spec: spec.md
Input: Feature specification from /specs/006-vagrant-demo-lab/spec.md
Summary
Create a reproducible multi-VM demonstration environment using Vagrant with Rocky Linux 9 VMs that simulates an HPC cluster with FreeIPA, Wazuh, Slurm, and NFS. The lab enables interactive demonstrations of project onboarding, compliance drift detection/remediation, auditor package generation, and node lifecycle management without requiring production infrastructure.
Technical Context
Language/Version: Bash (orchestration scripts), Ansible 2.15+ (provisioning), Ruby (Vagrantfile)
Primary Dependencies: Vagrant 2.3+, VirtualBox 7.0+ / libvirt / vagrant-qemu, Ansible
Storage: NFS shared storage on mgmt01, local VM disks via Vagrant
Testing: Manual verification via demo scripts, Ansible --check mode
Target Platform: macOS (Apple Silicon via QEMU x86 emulation, Intel via VirtualBox), Linux (libvirt/VirtualBox)
Project Type: Infrastructure/DevOps - demo environment with playbooks and scripts
Performance Goals: vagrant up < 30 minutes, demo-reset.sh < 5 minutes
Constraints: 16GB host RAM minimum, 100GB disk, air-gapped operation after initial setup
Scale/Scope: 4 VMs (mgmt01, login01, compute01, compute02), 4 demonstration scenarios
Constitution Check
GATE: Must pass before Phase 0 research. Re-check after Phase 1 design.
| Principle | Status | Notes |
|---|---|---|
| I. Plain Language First | PASS | Demo narratives include talking points for non-technical audiences |
| II. Data Model as Source of Truth | PASS | Lab uses existing control_mapping.yml and glossary; no data duplication |
| III. Compliance as Code | PASS | All compliance controls implemented via Ansible roles with tags |
| IV. HPC-Aware | PASS | Lab simulates HPC environment with Slurm; demonstrates HPC-specific tailoring |
| V. Multi-Framework | PASS | Lab exercises existing multi-framework mappings via assessment playbooks |
| VI. Audience-Aware Documentation | PASS | Scenario narratives target presenter audience; lab generates auditor packages |
| VII. Idempotent and Auditable | PASS | All scenario playbooks are idempotent; demo-reset.sh returns to baseline |
| VIII. Prefer Established Tools | PASS | Uses FreeIPA, Wazuh, Slurm, auditd per approved tooling list |
Gate Status: PASS - All 8 principles satisfied
Project Structure
Documentation (this feature)
specs/006-vagrant-demo-lab/
βββ spec.md # Feature specification
βββ plan.md # This file
βββ research.md # Phase 0 output
βββ data-model.md # Phase 1 output
βββ quickstart.md # Phase 1 output
βββ contracts/ # Phase 1 output (internal contracts)
βββ tasks.md # Phase 2 output (/speckit.tasks command)
Source Code (repository root)
demo/
βββ vagrant/
β βββ Vagrantfile # Multi-VM lab definition
β βββ ansible.cfg # Ansible config for lab
β βββ inventory/
β βββ hosts.yml # Dynamic/static inventory for VMs
βββ scripts/
β βββ demo-setup.sh # Bring up lab, run provisioning
β βββ demo-reset.sh # Reset to baseline state
β βββ demo-break.sh # Introduce compliance violations
β βββ demo-fix.sh # Run remediation playbooks
βββ playbooks/
β βββ provision.yml # Initial VM provisioning
β βββ scenario-a-onboard.yml # Project Helios onboarding
β βββ scenario-b-drift.yml # Break/detect/fix cycle
β βββ scenario-c-audit.yml # Generate auditor package
β βββ scenario-d-lifecycle.yml # Node add/remove demonstration
βββ narratives/
βββ scenario-a.md # Onboarding talking points
βββ scenario-b.md # Drift detection talking points
βββ scenario-c.md # Audit package talking points
βββ scenario-d.md # Lifecycle management talking points
Structure Decision: Infrastructure demo project using demo/ directory tree isolated from main rcd-cui codebase. Playbooks leverage existing roles from roles/ directory.
Complexity Tracking
No constitution violations requiring justification.